import logging
import os
import time
from logging.handlers import RotatingFileHandler
import datetime
from conf import setting

# 从setting.py文件中获取log目录的路径(绝对路径)
log_path = setting.FILE_PATH["LOG"]

# 若log目录不存在，则创建
if not os.path.exists(log_path):
    os.mkdir(log_path)

# 定义日志文件名
logfile_name = os.path.join(log_path, f"test.{time.strftime("%Y%m%d_%H%M%S")}.log")


class ReadLoad:

    def __init__(self):
        self.handle_overdue_log()

    def handle_overdue_log(self):
        """处理过期日志文件"""
        # 获取系统的当前时间
        now_time = datetime.datetime.now()
        # 日期偏移30天，最多保留30的日志文件，超过自动清理
        offset_date = datetime.timedelta(days=-1)
        # 获取前一天时间戳
        before_date = (now_time + offset_date).timestamp()
        # 找到目录下的文件
        files = os.listdir(log_path)
        for file in files:
            if os.path.splitext(file)[1]:
                filepath = log_path + "\\" + file
                file_create_time = os.path.getctime(filepath)  # 获取文件创建时间,返回时间戳
                # dateArray = datetime.datetime.fromtimestamp(file_createtime) #标准时间格式
                # print(dateArray.strftime("%Y--%m--%d %H:%M:%S"))
                if file_create_time < before_date:
                    os.remove(filepath)
                else:
                    continue

    def output_logging(self):
        # 获取日志对象：logger | 使用__name__作为日志名的好处：其他模块调用logger时，自动以模块路径命名，方便定位日志来源
        logger = logging.getLogger(__name__)

        # 若不存在日志处理器，则生成日志处理器，避免重复生成日志处理器
        if not logger.handlers:
            # 设置日志对象的处理级别
            logger.setLevel(setting.LOG_LEVEL)

            # 设置日志格式
            log_format = logging.Formatter(
                '%(levelname)s - %(asctime)s - %(filename)s:%(lineno)d -[%(module)s:%(funcName)s] - %(message)s')

            # 日志输出到指定文件 | mode="a"：追加写入 | maxBytes=5242880：单个文件最大字节数（5MB）|  backupCount=7：保留的旧日志文件数量（如设为 7，则总文件数为 当前文件 + 7个备份 | encoding="utf-8"：文件编码（推荐显式指定 utf-8，避免跨平台乱码）
            fh = RotatingFileHandler(filename=logfile_name, mode="a", maxBytes=5242880, backupCount=7, encoding="utf-8")

            fh.setLevel(setting.LOG_LEVEL)
            fh.setFormatter(log_format)
            # 将日志处理器(文件)加入至日志对象中
            logger.addHandler(fh)

            # 日志输出到控制台
            sh = logging.StreamHandler()
            sh.setLevel(setting.STREAM_LOG_LEVEL)
            sh.setFormatter(log_format)
            # 将日志处理器(控制台)加入至日志对象中
            logger.addHandler(sh)

        return logger


# 调用ReadLoad()类的output_logging()方法，获取日志对象
logs = ReadLoad().output_logging()

if __name__ == '__main__':
    print(logfile_name)